package com.kiven.thread;

import java.lang.Runnable;

public class ThreadDemo2 implements Runnable {

	/*
	 * 同步代码块和同步方法区别和用法
	 * 
	 */
	
	@Override
	public void run() {
		for(int i=0 ; i<5; i++) {
			System.out.println(Thread.currentThread().getName() + ": for loop : " + i);
			
			if (i == 2 && Thread.currentThread().getName().equals("t1_name")) {
				try {
					Thread.currentThread().sleep(5000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) throws Exception {
		/*
		 * 第一个for循环没有受synchronized保护。对于第一个for循环，t1, t2可以同时访问。运行结果表明t1执行到了k =
		 * 2时，t2开始执行了。t1首先执行完了第一个for循环，此时还没有执行完第一个for循环（ t2刚执行到k =
		 * 2）。t1开始执行第二个for循环，当t1的第二个for循环执行到k = 1时，t2的第一个for循环执行完了。
		 * t2想开始执行第二个for循环，但由于t1首先执行了第二个for循环，这个对象的锁标志自然在t1手中（
		 * synchronized方法的执行权也就落到了t1手中），在t1没执行完第二个for循环的时候，它是不会释放锁标志的。
		 * 所以t2必须等到t1执行完第二个for循环后，它才可以执行第二个for循环
		 */
		Runnable r1 = new ThreadDemo2();
		
		Thread t1 = new Thread(r1,"t1_name");
		Thread t2 = new Thread(r1,"t2_name");
		
		t1.setPriority(Thread.MAX_PRIORITY);
		t2.setPriority(Thread.MIN_PRIORITY);
		
		t1.start();
		
		t2.start();
	}

}
